local Exception =require("demo.exception.exception")
require("util.PrintUtil")

local _M={

    version="0.0.1",
    name="我的过滤器"
}

function _M:access(GatewayPluginConfig,RequestContext)
    print("执行access阶段处理")
    print("准备抛出异常")

    local flag,err = Exception:try(
        function (arg )

            print("获取到的参数个数为"..#arg)
            --print("获取到的第一个参数是"..arg[0])
           -- print("获取到的第2个参数是"..arg[1])
            print("自定义业务处理 准备手动抛出异常")
            local myexception =  Exception:new(001,"我的异常",200)
            print("准备 throw ")
            myexception:throw()
        end,
        function (err)
            print("自定义catch 异常")
            if err == nil then
                print("在catch 中没有捕捉到异常对象")
            else
                print("在catch 捕捉到异常对象 类型是"..type(err).."值是"..tostring(err))
                if type(err) =="table" then
                    printTable(err)
                end
            end
            print("在catch中输出异常")
           -- print("在catch中输出异常"..yourException:toString());
            Exception:printStackTrace()


        end


       , 1,2,3,4

    )




end
function _M:log(GatewayPluginConfig,RequestContext)
    print("执行log阶段处理")

end
function _M:log(GatewayPluginConfig,RequestContext)
    print("执行log阶段处理")

end


local myPlugin = _M;
myPlugin:access({},{});




----------怎么抛出自定义异常
print("\n\n-----------测试抛自定义异常")
print(Exception:new(1,"hello","200"):string())

----------------------

print("\n\n---------测试抛出数据库异常")

local flag,err = Exception:try(
        function (arg )

            print("连接数据拨错"..#arg)
            --print("获取到的第一个参数是"..arg[0])
            -- print("获取到的第2个参数是"..arg[1])
            print("自定义业务处理 准备手动抛出异常")
             DbException.throw({ msg="自定义数据库异常" })

        end,
        function (err)
            print("自定义catch 异常")
            if err == nil then
                print("在catch 中没有捕捉到异常对象")
            else
                print("在catch 捕捉到异常对象 类型是"..type(err).."值是"..tostring(err))
                if type(err) =="table" then
                    printTable(err)
                end
            end
            print("在catch中输出异常")
            -- print("在catch中输出异常"..yourException:toString());
            Exception:printStackTrace()


        end


, 1

)

--return _M



function bizFunc (arg )

    print("发生业务错误"..#arg)

    Exception:new(3001,"我的错误消息","http返回码"):throw();

end

--function catchFunc (err )
--
--print("捕捉异常");
--print(debug.traceback());
--
--    ngx.header['content_type'] ="application/json"
--
--
--
--    ngx.say("输出结果")
--    if err == nil then
--        ngx.say("err是nuil")
--        print("在catch 中没有捕捉到异常对象")
--    else
--        ngx.say("err是nuil")
--        print("在catch 捕捉到异常对象 类型是"..type(err).."值是"..tostring(err))
--        if type(err) =="table" then
--
--            ngx.say(tostring(err.string()))
--
--            printTable(err)
--        end
--    end
--end

local flag,err = Exception:try(
bizFunc,
        function  (err )

print("捕捉异常");
print(debug.traceback());

ngx.header['content_type'] ="application/json"



ngx.say("输出结果")
if err == nil then
    ngx.say("err是nil")
    print("在catch 中没有捕捉到异常对象")
else
    ngx.say("err不是是nil")
    ngx.say("在catch 捕捉到异常对象 类型是"..type(err).."值是"..tostring(err))
    print("在catch 捕捉到异常对象 类型是"..type(err).."值是"..tostring(err))
    if type(err) =="table" then
        printTable(err)
        ngx.say(err.code);
        ngx.say(err.string());
        ngx.say(tostring(err.string()))

        printTable(err)
    end
end
end, 1

)




